﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using LHS.Core.TableInfo;
using MS.Core.Constants.Objects;
using MS.Core.Base.Transaction;
using System.Collections.Specialized;

namespace LHS.Win
{
    public partial class frmBACD : Form
    {
        LHS.Core.Clinical.ClinicalController objController = new LHS.Core.Clinical.ClinicalController();
        // Methods
        public frmBACD()
        {
            this.InitializeComponent();
        }

        private void btHuyBA_Click(object sender, EventArgs e)
        {
            base.Close();
        }

        private void btSaveBA_Click(object sender, EventArgs e)
        {
            if (this.txtALBenh.Text == "")
            {
                MessageBox.Show("Loại bệnh án chưa nhập.", "Lỗi nhập", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            else if (!this.rdBenhA.Checked && !this.rdCD.Checked)
            {
                MessageBox.Show("Bạn nên chọn loại cây Bệnh hoặc cây Chẩn Đoán cần sao lưu", "Lỗi nhập", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            else if (this.lbLBA.Items.Count <= 0)
            {
                MessageBox.Show("Danh sách tên bệnh chưa nhập", "Lỗi nhập", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            else
            {
                if (this.rdBenhA.Checked && (MessageBox.Show("Bạn có đồng ý nhập loại Bệnh Án", "Nhập", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes))
                {
                    this.IBAn();
                }
                if (this.rdCD.Checked && (MessageBox.Show("Bạn có đồng ý nhập loại Chẩn Đoán.", "Nhập", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes))
                {
                    this.ICDoan();
                }
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (this.txtALBenh.Text == "")
            {
                MessageBox.Show("Loại bệnh chưa được nhập!", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            else if (this.txtTBA.Text == "")
            {
                MessageBox.Show("Tên bệnh chưa được nhập!", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            else if (this.txtTBA.Text != "")
            {
                this.lbLBA.Items.Add(this.txtTBA.Text.ToString());
                this.txtTBA.Text = "";
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (this.lbLBA.SelectedIndex != -1)
            {
                this.lbLBA.Items.RemoveAt(this.lbLBA.SelectedIndex);
            }
        }

        private bool checkIBA()
        {
            string str2 = string.Empty;
            try
            {
                List<ExpressionObject> param = new List<ExpressionObject>();
                param.Add(new ExpressionObject(InfoSickTree.SKTNAME, this.txtALBenh.Text));
                DataTable dt = objController.GetData(InfoSickTree.TABLENAME, param);
                if (dt.Rows.Count > 0)
                {
                    str2 = dt.Rows[0][InfoSickTree.SKTNAME].ToString();
                }
            }
            catch (Exception ex)
            {
                Class.ShowException(ex);
            }
            if (str2 == this.txtALBenh.Text)
            {
                return false;
            }
            return true;
        }

        private bool checkICDoan()
        {
            string str2 = string.Empty;
            try
            {
                List<ExpressionObject> param = new List<ExpressionObject>();
                param.Add(new ExpressionObject(InfoPathologicalTree.PLTNAME, this.txtALBenh.Text));
                DataTable dt = objController.GetData(InfoPathologicalTree.TABLENAME, param);
                if (dt.Rows.Count > 0)
                {
                    str2 = dt.Rows[0][InfoPathologicalTree.PLTNAME].ToString();
                }
            }
            catch (Exception ex)
            {
                Class.ShowException(ex);
            }
            if (str2 == this.txtALBenh.Text.Trim())
            {
                return false;
            }
            return true;
        }

        private void IBAn()
        {
            if (!this.checkIBA())
            {
                MessageBox.Show("Loại bệnh này đã tồn tại trong dữ cơ sở dữ liệu.", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            else
            {
                TransactionManager trans = TransactionManager.ThreadTransactionMgr();
                try
                {
                    trans.BeginTransaction();
                    //insert SickTree
                    DataTable dtSickTree = InfoSickTree.GetStructure();
                    DataRow dr = dtSickTree.NewRow();
                    dr[InfoSickTree.SKTNAME] = this.txtALBenh.Text;
                    dtSickTree.Rows.Add(dr);
                    if (objController.InsertRow(dr, new string[] { InfoSickTree.SKTISN }) == true) //neu insert thanh cong
                    {
                        ListDictionary param = new ListDictionary();
                        param.Add(InfoSickTree.SKTNAME, this.txtALBenh.Text);
                        object intSKTISN = objController.GetScalar(InfoSickTree.SKTISN, param,InfoSickTree.TABLENAME);
                        if (intSKTISN is int)
                        {
                            DataTable dtSick = InfoSicks.GetStructure();
                            DataRow drSick;
                            //insert vào bảng sick
                            for (int i = 0; i < this.lbLBA.Items.Count; i++)
                            {
                                drSick = dtSick.NewRow();
                                drSick[InfoSicks.SKTISN] = (int)intSKTISN;
                                drSick[InfoSicks.SCKNAME] = this.lbLBA.Items[i].ToString();
                                dtSick.Rows.Add(drSick);
                                objController.InsertRow(drSick, new string[] { InfoSicks.SCKISN});
                            }
                        }
                    }
                    MessageBox.Show("Dữ liệu đã được nhập", "Nhập", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    this.txtALBenh.Text = "";
                    this.txtTBA.Text = "";
                    this.lbLBA.Text = null;
                    this.lbLBA.Items.Clear();

                    trans.CommitTransaction();
                }
                catch (Exception exception)
                {
                    trans.RollbackTransaction();
                    Class.ShowException(exception);
                }
               
            }
        }

        private void ICDoan()
        {
            if (!this.checkICDoan())
            {
                MessageBox.Show("Loại bệnh này đã tồn tại trong dữ cơ sở dữ liệu.", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            else
            {
                TransactionManager trans = TransactionManager.ThreadTransactionMgr();
                try
                {
                    trans.BeginTransaction();
                    //insert SickTree
                    DataTable dtPathologicalTree = InfoPathologicalTree.GetStructure();
                    DataRow dr = dtPathologicalTree.NewRow();
                    dr[InfoPathologicalTree.PLTNAME] = this.txtALBenh.Text;
                    dtPathologicalTree.Rows.Add(dr);
                    if (objController.InsertRow(dr, new string[] { InfoPathologicalTree.PLTISN }) == true) //neu insert thanh cong
                    {
                        ListDictionary param = new ListDictionary();
                        param.Add(InfoPathologicalTree.PLTNAME, this.txtALBenh.Text);
                        object intPLTISN = objController.GetScalar(InfoPathologicalTree.PLTISN, param, InfoPathologicalTree.TABLENAME);
                        if (intPLTISN is int)
                        {
                            DataTable dtPathologicalSigns = InfoPathologicalSigns.GetStructure();
                            DataRow drPathologicalSigns;
                            //insert vào bảng sick
                            for (int i = 0; i < this.lbLBA.Items.Count; i++)
                            {
                                drPathologicalSigns = dtPathologicalSigns.NewRow();
                                drPathologicalSigns[InfoPathologicalSigns.PLTISN] = (int)intPLTISN;
                                drPathologicalSigns[InfoPathologicalSigns.PLSPATHOLOGICALSIGNS] = this.lbLBA.Items[i].ToString();
                                dtPathologicalSigns.Rows.Add(drPathologicalSigns);
                                objController.InsertRow(drPathologicalSigns, new string[] { InfoPathologicalSigns.PLSISN });
                            }
                        }
                    }

                    MessageBox.Show("Dữ liệu đã được nhập", "Nhập", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    this.txtALBenh.Text = "";
                    this.txtTBA.Text = "";
                    this.lbLBA.Text = "";
                    this.lbLBA.Items.Clear();
                }
                catch (Exception exception)
                {
                    trans.RollbackTransaction();
                    Class.ShowException(exception);
                }
              
            }
        }

        private void lbLBA_DoubleClick(object sender, EventArgs e)
        {
            if (this.lbLBA.SelectedIndex != -1)
            {
                this.lbLBA.Items.RemoveAt(this.lbLBA.SelectedIndex);
            }
        }

        private void txtTBA_KeyPress(object sender, KeyPressEventArgs e)
        {
            if ((e.KeyChar == '\r') && (this.txtTBA.Text != ""))
            {
                this.lbLBA.Items.Add(this.txtTBA.Text.ToString());
                this.txtTBA.Text = "";
            }
        }

        private void txtTBA_Leave(object sender, EventArgs e)
        {
            if (this.txtALBenh.Text == "")
            {
                MessageBox.Show("Tên bệnh chưa nhập được nhập!", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            else
            {
                this.lbLBA.Items.Add(this.txtTBA.Text.ToString());
                this.txtTBA.Text = "";
            }
        }

        private void txtTBA_TabIndexChanged(object sender, EventArgs e)
        {
            this.lbLBA.Items.Add(this.txtTBA.Text.ToString());
            this.txtTBA.Text = "";
        }

    }
}